package com.ZeroCarbon.domain.po;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.json.JSONUtil;
import com.ZeroCarbon.domain.dto.PostDetailDTO;
import com.ZeroCarbon.domain.dto.PostManageDTO;
import com.ZeroCarbon.domain.dto.PostPreviewDTO;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.time.LocalDateTime;

/**
 * 记录类
 *
 * @since 2024-10-26
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@TableName("record")
public class Post {
    /**
     * 记录id
     */
    private String id;

    /**
     * 标题
     */
    private String title;

    /**
     * 正文
     */
    private String content;

    /**
     * 标签信息Json
     */
    private String tagsJson;

    /**
     * 图片Json
     */
    private String imagesJson;

    /**
     * 是否私密
     */
    @TableField("private")
    private boolean privateCondition;

    /**
     * 保存true发布false
     */
    @TableField("is_save")
    private boolean isSave;

    /**
     * 喜爱数
     */
    private int liked;

    /**
     * 收藏数
     */
    private int favorite;

    /**
     * 最后修改时间
     */
    private LocalDateTime lastTime;

    /**
     * PO转化为PostPreviewDTO
     */
    public PostPreviewDTO toPostPreviewDTO() {
        //宝贝对象
        PostPreviewDTO postPreviewDTO = BeanUtil.copyProperties(this, PostPreviewDTO.class);
        return postPreviewDTO
                //设置标签信息
                .setTags(JSONUtil.toList(JSONUtil.parseArray(tagsJson), String.class))
                //设置封面
                .setImageUrl(JSONUtil.toList(JSONUtil.parseArray(imagesJson), String.class).getFirst());
    }

    /**
     * PO转化为PostDetailDTO
     */
    public PostDetailDTO toPostDetailDTO() {
        //拷贝对象
        PostDetailDTO postDetailDTO = BeanUtil.copyProperties(this, PostDetailDTO.class);
        return postDetailDTO
                //解析图片json
                .setImages(JSONUtil.toList(JSONUtil.parseArray(imagesJson), String.class))
                //设置标签信息
                .setTags(JSONUtil.toList(JSONUtil.parseArray(tagsJson), String.class))
                //设置收藏数
                .setFavoriteNum(favorite);
    }

    /**
     * PO转化为PostManageDTO
     */
    public PostManageDTO toPostManageDTO() {
        //拷贝对象
        PostManageDTO postManageDTO = BeanUtil.copyProperties(this, PostManageDTO.class);
        return postManageDTO
                //设置封面
                .setImageUrl(JSONUtil.toList(JSONUtil.parseArray(imagesJson), String.class).getFirst())
                //设置标签
                .setTags(JSONUtil.toList(JSONUtil.parseArray(tagsJson), String.class))
                //是否保存
                .setSaveCondition(isSave)
                //是否私密
                .setPrivateCondition(privateCondition);
    }
}
